Raspberry Pi 的C++交叉编译环境配置 (4)

上一节我们介绍完vscode task任务管理的配置,这一节我们介绍最重要的调试环境的配置。

在VSCODE下按F5 ,选择C++

vscode-debug

VSCODE会自动弹出launch.json文件

复制以下内容,覆盖launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/testapp_d",
"miDebuggerServerAddress": "raspberry:9091",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"environment": [],
"externalConsole": true,
"linux": {
"miDebuggerPath": "/home/george/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gdb",
"MIMode": "gdb"
}
}
]
}

配置中最重要的三个参数分别是,

  • program: 执行程序的带路径的名称
  • miDebuggerServerAddress: 调试服务器的地址,”raspberry:9091” 其中raspberry是IP地址也可以是主机名称,后面是端口号
  • miDebuggerPath: 调试器地址,注意这里要替换成你的调试器所在的路径

我们在上一节中介绍了task的配置,其中有一项为 remote debug 。这个任务中引用了一段脚本,用来做一些远程调试的必要准备工作,脚本如下:

1
2
3
4
5
6
7
8
9
#clean and build
#make clean
make ver=debug debug
#transfer exe file to raspberr pi
scp ./testapp_d pi@raspberry:~/project/testapp_d
# Kill gdbserver if it's running
ssh pi@raspberry killall gdbserver &> /dev/null
# Compile myprogram and launch gdbserver, listening on port 9091
ssh pi@raspberry "cd project && gdbserver :9091 ./testapp_d"

脚本主要做了以下工作:

  • 用debug模式编译执行文件
  • 将执行文件传输至RPi
  • 远程执行结束gdbserver进程,以防止有没有结束的gdbserver占用端口
  • 执行启动gdbserver调试执行文件

现在RPi上还没有project目录,下面我们在RPi上创建一下

1
mkdir project

现在我们可以测试一下环境是否搭建成功,测试前请确保Ubuntu和RPi的网络连接正常

  1. 在vscode的test.cpp中按下F9选取一行作为断点

    vscode-debug-break

  2. 在vscode中按下 Ctrl+F7 执行编译、传输、启动gdbserver的工作

    vscode-debug-serveron

  3. 看到gdbserver启动成功后,按下F5 启动调试,调试器会自动连接,如果没有自动打开可以选择左侧边栏的调试面板按钮,可以看到代码已经命中断点,所有的变量的值都显示在变量栏里,可以按F10单步调试。程序的输出会显示在Terminal里。

    vscode-debug-stepin

至此我们所有的配置工作就已经完成了,我总结一下现在的开发流程就是:

  1. 编辑代码,F7查看是否有编译错误
  2. Ctrl+F7传输代码至RPi
  3. F9源代码中添加短短
  4. F5连接远程调试器进行调试
  5. 发现错误,重复1